Para fines de este post, diremos que C# es un lenguaje fuertemente tipado (aunque ya permite tipado dinámico y eso lo palticaré en otro post), lo que significa que cada variable, literal o constante debe tener un tipo declarado y dicho tipo no cambiará con el flujo del programa. Dentro de los tipos que ofrece C#, podemos encontrar dos grandes categorías:

Predefinidos

Son los tipos que el lenguaje incorpora para almacenar valores comunes, entre ellos:

  • bool para valores binarios, como un o no, o 1 o 0
  • int para valores enteros, que puede ir de -2,147,483,648 a 2,147,483,647
  • char para caracteres como a, @ o %
  • string para una secuencia de caracteres

La lista la completan: byte, decimal, float, long, sbyte, short, uint, ulong, ushort y object.

A partir de estos tipos de dato se pueden crear otros tipos con la finalidad de satisfacer nuestras necesidades.

Compuestos

Los tipos compuestos están formados a partir de los tipos predefinidos y nos ayudarán a modelar de manera más real los problemas con los que nos encontremos. Estos se crean usando las palabras reservadas interface, struct, enum y class.

Otra clasificación que podemos definir, es la siguiente, que clasifica los tipos de dato de acuerdo a como se gestionan en la memoria:

Referencia

Se almacena en ellos una referencia a los datos, por ejemplo un tipo de dato class o string.

Valor

Almacenan el valor del dato por completo, por ejemplo struct y enum.

Ejemplo

Para ilustrar esta última categoría, tomemos el siguiente ejemplo:

  
struct Tiempo 
{
	public int Minutos;
	public int Horas;
}
// ...  
Tiempo t1 = new Tiempo();
Tiempo t2 = t1;
  
class Tiempo 
{
	public int Minutos;
	public int Horas;
}
// ...  
Tiempo t1 = new Tiempo();
Tiempo t2 = t1;
Tipos por valor images_set
Tipos por valor images_set


Las imagenes debajo de los códigos tienen la intención de mostrar una simple representación de lo que pasa al ejecutar el código. Al hacer t2 == t1 sobre la estructura de Tiempo, al ser un un tipo por valor se crea una copia, lo cual significa que cualquier modificación que se haga a t1 no provocará ningún cambio sobre t2.
Por otro lado, en el caso de la clase Tiempo, si se hiciera alguna modificación sobre t2, t1 también se vería afectado al ser un tipo de referencia.


En futuros post seguré explorando algunos detalles escenciales de C#, como arreglos, métodos y clases.

¿Dudas? ¿comentarios?
¿Quieres ver más como esto? revisa la etiqueta #AprendeCSharp.
Comparte esto